/**
* @Title: ServerObject.java
* @Package com.an.objecttran
* @Description: TODO(用一句话描述该文件做什么)
* @author antch,861710865@qq.com
* @date 2017年7月26日 下午3:34:23
* @version V1.0
*/

package com.an.objecttran;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;

/**
 * @ClassName: ServerObject
 * @Description: TODO(服务端)
 * @author antch,861710865@qq.com
 * @date 2017年7月26日 下午3:34:23
 *
 */

public class ServerObject {

	private int port = 8080;

	public ServerObject(int port) {
		super();
		this.port = port;
	}

	public void run() {
		EventLoopGroup bossGroup = new NioEventLoopGroup();
		EventLoopGroup workerGroup = new NioEventLoopGroup();
		ServerBootstrap serverBootstrap = new ServerBootstrap();
		serverBootstrap.group(bossGroup, workerGroup);
		serverBootstrap.channel(NioServerSocketChannel.class);
		serverBootstrap.childHandler(new ServerObjectInitializer());
		serverBootstrap.option(ChannelOption.SO_BACKLOG, 128);
		serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);

		System.out.println("****服务器启动开始****");

		ChannelFuture f = null;
		try {
			// 绑定端口，开始接收进来的连接
			f = serverBootstrap.bind(port).sync();
			System.out.println("****服务器启动成功****");
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

		// 等待服务器socket关闭
		// 在这个例子中，不会发很，但你可以优雅的关闭你的服务器
		try {
			f.channel().closeFuture().sync();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * @Title: main @Description: TODO(启动服务端) @param @param args 设定文件 @return void
	 * 返回类型 @throws
	 */

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		new ServerObject(8080).run();
	}

}
